package com.htfyun.serialport.uartservo.AX12_Servo;


import com.htfyun.serialport.uartservo.ServoErrorAttr;

public enum AX12_errorAttr {

    no_error((byte) 0),

    //输入电压错误, 如果舵机电压超出控制表规定的工作电压范围，该字节设为 1
    error_flag_input_voltage((byte) (1 << 0)),

    //角度限制错误, 舵机目标位置限于 CW 角和 CCW 角之间，如果指令包给定的 目标位置超出这个范围，该字节设为 1
    error_flag_angle_limit((byte) (1 << 1)),

    //过热错误,如果舵机内部温度高于控制表规定的工作温度，该字节设为 1
    error_flag_over_heat((byte) (1 << 2)),

    //范围错误, 如果指令超出规定范围，该字节设为 1
    error_flag_over_range((byte) (1 << 3)),

    //校验码错误,如果指令包的校验码不正确，该字节设为 1
    error_flag_check_sum((byte) (1 << 4)),

    //过载错误, 如果规定的最大扭矩无法带动负载，该字节设为 1
    error_flag_over_load((byte) (1 << 5)),

    //指令错误, 如果控制器发送的是未定义指令或无 Reg_Write 指令的行为 指令，该字节设为 1
    error_flag_command_err((byte) (1 << 6)),

    error_flag_unknown((byte) (1 << 7)),


    ;
    private byte errorFlag;

    AX12_errorAttr(byte errorFlag) {

        this.errorFlag = errorFlag;
    }

    public byte getErrorFlag() {
        return errorFlag;
    }

    /**
     * 返回值可以是null
     * @param attr
     * @return
     */
    public static ServoErrorAttr toServoErrorAttr(AX12_errorAttr attr) {
        ServoErrorAttr errorAttr = null;
        switch (attr) {
            case error_flag_over_heat:
                errorAttr = ServoErrorAttr.error_over_heat;
                break;
            case error_flag_over_load:
                errorAttr = ServoErrorAttr.error_over_load;
                break;
            case error_flag_input_voltage:
                errorAttr = ServoErrorAttr.error_input_voltage;
                break;
            case error_flag_angle_limit:
                errorAttr = ServoErrorAttr.error_angle_area;
                break;
            case no_error:
                break;
                default:
                    errorAttr = ServoErrorAttr.error_unknown;
                    break;
        }

        return errorAttr;
    }
}
